package com.enjoyor.soa.traffic.api.service.dubbo.iems;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.enjoyor.soa.traffic.api.dto.iems.InstructInfoDto;
import com.enjoyor.soa.traffic.api.dto.iems.InstructSessionDto;
import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

/**
 * @author 周宏伟
 * @date 2017年5月9日
 * @email zhouhongwei@enjoyor.net
 * @description 调度指令服务
 */

public interface DubboInstructInfoService {
	/**
	 * 生成会话
	 * 
	 * @param token
	 *            令牌
	 * @param dto
	 *            会话对象
	 * @return
	 */
	public ResultPojo addInstructSession(String token, InstructSessionDto dto, String eventId);

	/**
	 * 获取会话
	 * 
	 * @param token
	 *            令牌
	 * @param sessionId
	 *            会话编号
	 * @param senderId
	 *            发送者编号
	 * @param receiverId
	 *            接收者编号
	 * @return
	 */
	public ResultPojo getInstructSession(String token, String sessionId, String senderId, String receiverId);

	/**
	 * 发送指令
	 * 
	 * @param token
	 *            令牌
	 * @param dto
	 *            指令对象
	 * @return
	 */
	public ResultPojo addInstructInfo(String token, InstructInfoDto dto);

	/**
	 * 发送指令
	 * 
	 * @param token
	 *            令牌
	 * @param dto
	 *            指令对象
	 * @param receivers
	 *            接收人
	 * @return
	 */
	public ResultPojo addInstructInfo(String token, InstructInfoDto dto, List<Map<String, Object>> receivers);

	/**
	 * 获取指令
	 * 
	 * @param token
	 *            令牌
	 * @param sessionId
	 *            会话编号
	 * @param sendTime
	 *            发送时间，取指定时间之后记录
	 * @return
	 */
	public ResultPojo getInstructInfo(String token, String sessionId, Date sendTime);

	/**
	 * 获取指令（以发送者为基准）
	 * 
	 * @param token
	 * @param sessionId
	 * @return
	 */
	public ResultPojo getInstructInfo(String token, String sessionId);

	/**
	 * 获取事件、会话关联关系
	 * 
	 * @param token
	 * @param eventId
	 * @param sessionId
	 * @return
	 */
	public ResultPojo getEventSessionInfo(String token, String eventId, String sessionId);
}
